運行環境
程序執行的過程:
? ? . 程序必須載入內存中。在有操作系統的環境中:一般這個由操作系統完 成。在獨立的環境中,程序的載入必須 由手工安排,也可能是通過可執行代碼置入只讀內存來完成。
? ? . 程序的執行便開始。接著便調用main函數。
? ? . 開始執行程序代碼。這個時候程序將使用一個運行時堆棧(stack), 存儲函數的局部變量和返回地址。程序同 時也可以使用靜態(static)內 存,存儲于靜態內存中的變量在程序的整個執行過程一直保留他們的值。
? ? . 終止程序。正常終止main函數;也有可能是意外終止。
二、預處理詳解
預定義符號
__FILE__ ? ? ?//進行編譯的源文件
__LINE__ ? ? //文件當前的行號
__DATE__ ? ?//文件被編譯的日期
__TIME__ ? ?//文件被編譯的時間
__STDC__ ? ?//如果編譯器遵循ANSI C,其值為1,否則未定義
這些預定義符號都是語言內置的;
舉個栗子:
#include<stdio.h>
int main()
{
? ? printf("file:%s line:%d\n", __FILE__, __LINE__);
? ? return 0;
}
#define
#define 定義標識符
語法:
#define name stuff
stuff這里可以是一段表達式,也可以是數字或字母;
可以用一段代碼舉例:
#include<stdio.h>
#define CASE break;case
int main() {
? ? int x = 0;
? ? switch (x) {
? ? case 1:
? ? ? ? break;
? ? CASE 2:
? ? CASE 3 :
? ? CASE 4:
? ? }
? ? return;
}
有一個在萌新時期都會有的一個困惑:
在define定義標識符的時候,要不要在最后加上 ; ?
例如:
#define MAX 1000;
#define MAX 1000
其實這里面大有講究,可以看一下下面這段代碼:
#include<stdio.h>
#define MAX 1000;
int main() {
? ? int max = 0;
? ? max = 1000;
? ? if (max == MAX) {
? ? ? ? printf("1");
? ? }
? ? else {
? ? ? ? printf("2");
? ? }
? ? return 0;
}
下面是宏的申明方式:
? ? #define name( parament-list ) stuff 其中的 parament-list 是一個由逗號隔開的符號表,它們可能出現在 stuff中。
? ? 注意: 參數列表的左括號必須與name緊鄰。
? ? 如果兩者之間有任何空白存在,參數列表就會被解釋為stuff的一部分。
?